package testCases;

import common.InitAndCloseWith2Driver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;

import java.util.List;
import java.util.concurrent.TimeUnit;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MessageTranslateTest extends InitAndCloseWith2Driver {
    @Order(1)
    @Test
    public void testSend() throws InterruptedException {
        // 使用 zhangsan 的账号登录
        String username = "zhangsan";
        String password = "123456";
        webDriver.get("http://8.130.172.144:8081/login.html");
        // 等待页面加载完成
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
        // 输入账号
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        // 输入密码并按下回车
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password, Keys.ENTER);

        // 点击第一个会话
        webDriver.findElement(By.cssSelector("#session-list > li:nth-child(1)")).click();

        // 使用发送按钮发消息
        // 输入
        webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"))
                .sendKeys("使用发送按钮");
        // 点击发送按钮
        webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.ctrl > button")).click();
        Thread.sleep(100);

        // 查看当前最后一条消息是否是: 使用发送按钮
        String lastMessage = webDriver
                .findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p"))
                .getText();
        System.out.println("lastMessage: " + lastMessage);
        Assertions.assertEquals(lastMessage, "使用发送按钮");

        // 使用 Enter 发送消息
        webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"))
                .sendKeys("使用 Enter", Keys.ENTER);
        Thread.sleep(100);
        // 查看当前最后一条消息是否是: 使用 Enter
        lastMessage = webDriver
                .findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p"))
                .getText();
        System.out.println("lastMessage: " + lastMessage);
        Assertions.assertEquals(lastMessage, "使用 Enter");
    }

    @Order(2)
    @Test
    public void sendAndReceive() throws InterruptedException {
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver2.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        // 分别使用 zhangsan 和 lisi 的账号登录
        loginWith2();

        // zhangsan 的 li
        List<WebElement> zhangsanLiList = webDriver
                .findElement(By.cssSelector("#session-list"))
                .findElements(By.tagName("li"));

        // 点击会话
        for (WebElement li : zhangsanLiList) {
            if (li.findElement(By.tagName("h3")).getText().equals("lisi")) {
                li.click();
            }
        }

        // lisi 的 li
        List<WebElement> lisiLiList = webDriver2
                .findElement(By.cssSelector("#session-list"))
                .findElements(By.tagName("li"));

        // 点击会话
        for (WebElement li : lisiLiList) {
            if (li.findElement(By.tagName("h3")).getText().equals("zhangsan")) {
                li.click();
            }
        }

        // zhangsan 给 lisi 发送消息
        webDriver
                .findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"))
                .sendKeys("我是张三", Keys.ENTER);
        System.out.println("发送消息: 我是张三");
        Thread.sleep(100);
        // zhangsan 消息框中出现自己的消息
        String selfMessage =
                webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p")).getText();
        Assertions.assertEquals("我是张三", selfMessage);
        System.out.println("张三消息框中出现自己的消息: 我是张三");


        // lisi 能收到消息
        // 获取左侧最后一条消息
        String lisiLastMessage =
                webDriver2.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p")).getText();
        System.out.println("李四收到消息: 我是张三");
        Assertions.assertEquals("我是张三", lisiLastMessage);

        //-------------------------------
        // lisi 给 zhangsan 发送消息
        webDriver2
                .findElement(By.cssSelector("body > div.client-container > div > div.right > textarea"))
                .sendKeys("我是李四", Keys.ENTER);
        System.out.println("发送消息: 我是李四");
        Thread.sleep(100);

        // lisi 消息框中出现自己的消息
        String selfMessage2 =
                webDriver2.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p")).getText();
        Assertions.assertEquals("我是李四", selfMessage2);
        System.out.println("李四消息框中出现自己的消息: 我是李四");

        // zhangsan 能收到消息
        // 获取左侧最后一条消息
        String zhangsanLastMessage =
                webDriver.findElement(By.cssSelector("body > div.client-container > div > div.right > div.message-show > div:last-child .box p")).getText();

        Assertions.assertEquals("我是李四", zhangsanLastMessage);
        System.out.println("张三收到消息: 我是李四");
    }
}
